package com.bee.剑指offer;

import java.util.HashSet;
import java.util.Set;

/**
 * 给定一个数组arr，返回arr的最长无重复元素子数组的长度，无重复指的是所有数字都不相同。
 * 子数组是连续的，比如[1,3,5,7,9]的子数组有[1,3]，[3,5,7]等等，但是[1,3,7]不是子数组
 */
public class 最长无重复子数组 {

    /**
     * 快慢指针，加集合判断重复性
     */
    public int maxLength(int[] arr) {
        if (arr.length <= 0) {
            return 0;
        }
        Set<Integer> set = new HashSet<>();
        int slow = 0;
        int high = 0;
        int count = 0;
        while (high < arr.length) {
            while (set.contains(arr[high])) {
                set.remove(arr[slow++]);
            }
            set.add(arr[high++]);
            count = Math.max(count, high - slow);
        }
        return count;
    }
}
